export default class Misc {
  /**
   * 这是一个字符串标签函数，可以使用模板字符串语法创建正则表达式。
   * 该函数会自动去除模板语法中的所有空白符和注释。
   * 同时，若模板的最后一个表达式在字符串末尾，则会将最后一个表达式作为正则的 flags 来使用。
   *
   * @see 标签函数 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Template_literals#带标签的模板字符串>
   * @see 正则表达式标志 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions#通过标志进行高级搜索>
   *
   * @param templateLiteralPatterns 被表达式分割开的字符串数组
   * @param expressions 表达式数组
   */
  static createRegExp = (templateLiteralPatterns: TemplateStringsArray, ...expressions: string[]) => {
    let fullString = '';
    let refFlags = '';
    templateLiteralPatterns.forEach((pattern, index) => {
      if (index === expressions.length - 1 && templateLiteralPatterns[index + 1] === '') {
        refFlags = expressions[index];
        fullString += pattern;
      } else if (index === templateLiteralPatterns.length - 1) {
        fullString += pattern;
      } else {
        fullString += `${pattern}${expressions[index]}`;
      }
    });
    const regString = fullString
      .replace(/\/{2}.+$/gm, '')
      .replace(/\s/gm, '');
    return new RegExp(regString, refFlags);
  };
}
